# t.column :titulo,              :string,   :null => false, :limit => 128
# t.column :titulo_sanitizado,   :string,   :null => false, :limit => 128
# t.column :texto,               :string,   :null => false, :limit => 1024
# t.column :precio,              :float,    :null => false
# t.column :estado,              :integer,  :null => false, :limit => 128

class Libro < ActiveRecord::Base
  acts_as_commentable

  #
  # estados
  #
  PUBLICADO = 'publicado'
  PREPARACION = 'preparacion'
  DESCATALOGADO = 'descatalogado'
  BORRADO = 'borrado'
  
  has_many  :imagenes_libro,
            :class_name => 'ImagenLibro',
            :order => "imagenes_libros.orden ASC"
    
  has_many  :imagenes,
            :through => :imagenes_libro,
            :source => :imagen

  #
  # validaciones
  #
  validates_presence_of     :titulo,             :message => 'falta el título'
  validates_presence_of     :texto,              :message => 'falta el texto de la ficha'
  validates_presence_of     :precio,             :message => 'falta el precio'
  validates_numericality_of :precio,             :message => 'el precio tiene que ser numérico'
            
  # call_backs
  before_save   :initialize_nicetitle
  before_save   :initialize_estado   
  
  def self.estados
    { 
      'Publicado' => Libro::PUBLICADO, 
      'Preparación' => Libro::PREPARACION, 
      'Descatalogado' => Libro::DESCATALOGADO,
      'Borrado' => Libro::BORRADO
    }
  end
  
  def imagen_principal
    self.imagenes.first
  end
       
  def tiene_imagen?( imagen_id )
    # TODO: posible count_by_libro_id_and_imagen_id?
    ImagenLibro.count( :conditions => ["libro_id = #{self.id} and imagen_id = #{imagen_id}"] ) > 0
  end
  
  def actualizar_imagenes( imagenes_ids )
    self.imagenes = []
    if not imagenes_ids.nil?
      imagenes_ids.each do |imagen_id|
        self.imagenes << Imagen.find_by_id( imagen_id )
      end
    end
  end
  
  def usado_por_algun_pedido?
    PedidoLinea.count( :conditions => ["libro_id = #{self.id}"] ) > 0
  end
  
  protected
    def initialize_nicetitle
      if self.new_record?
        self.titulo_sanitizado = self.titulo.to_slug
      end
    end
    
    def initialize_estado
      if self.new_record?
        self.estado = Libro::PUBLICADO
      end
    end

end